βœ… API λ©”νŠΈλ¦­ μ€‘κ°œ λ°±μ—”λ“œ & SDK μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ 개발

1. ν”„λ‘œμ νŠΈ κ°œμš”

이 ν”„λ‘œμ νŠΈλŠ” λ‹€μ–‘ν•œ μ™ΈλΆ€ 도메인 μ„œλΉ„μŠ€(A, B λ“±)μ—μ„œ λ°œμƒν•˜λŠ” νŠΈλžœμž­μ…˜ 이벀트λ₯Ό 쀑앙 μ§‘μ€‘μ‹μœΌλ‘œ μˆ˜μ§‘ν•˜κ³ ,
이λ₯Ό 기반으둜 Grafanaμ—μ„œ λŒ€μ‹œλ³΄λ“œλ‘œ μ‹œκ°ν™”ν•  수 μžˆλŠ”
Kotlin 기반 μ€‘κ°œ λ°±μ—”λ“œ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ SDKλ₯Ό κ΅¬ν˜„ν•˜λŠ” 것을 λͺ©ν‘œλ‘œ ν•©λ‹ˆλ‹€.

λͺ©ν‘œ: β€œλΆ„μ‚°λœ λ„λ©”μΈμ—μ„œ λ°œμƒν•˜λŠ” API 이벀트λ₯Ό μ€‘μ•™μ—μ„œ μˆ˜μ§‘, 뢄석, μ‹œκ°ν™” κ°€λŠ₯ν•˜κ²Œ ν•œλ‹€β€


2. μ•„ν‚€ν…μ²˜ ꡬ성도

πŸ˜ƒ μ•„ν‚€ν…μ²˜μ˜ ν”Œλ‘œμš°λŠ” κ°„λ‹¨ν•˜λ‹€.

βœ… 도메인 νŠΈλžœμž­μ…˜ 기반 μ‹€μ‹œκ°„ λ©”νŠΈλ¦­ μˆ˜μ§‘ 및 μ‹œκ°ν™” 흐름

도메인 ν΄λΌμ΄μ–ΈνŠΈ μ„œλ²„μ—μ„œ νŠΈλžœμž­μ…˜μ΄ λ°œμƒν•˜λ©΄,
λ‚΄μž₯된 μ€‘κ°œ μ„œλ²„ SDKκ°€ μžλ™μœΌλ‘œ μŠ€ν¬λž˜ν•‘ λ©”μ„œλ“œλ₯Ό 호좜

μ΄λ•Œ 호좜된 정보λ₯Ό κΈ°μ€€μœΌλ‘œ,
πŸ“‘ Prometheusκ°€ νŠΈλžœμž­μ…˜ 및 도메인 정보λ₯Ό μŠ€ν¬λž˜ν•‘ν•˜μ—¬ λ©”νŠΈλ¦­ 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³ 
πŸ“Š μˆ˜μ§‘λœ λ°μ΄ν„°λŠ” Grafana λŒ€μ‹œλ³΄λ“œμ—μ„œ μ‹€μ‹œκ°„ μ‹œκ°ν™”λ˜μ–΄ ν‘œμΆœλ©λ‹ˆλ‹€.

βž• SDK μ—°λ™λ§ŒμœΌλ‘œ λ©”νŠΈλ¦­ μˆ˜μ§‘ 및 λͺ¨λ‹ˆν„°λ§μ„ μ†μ‰½κ²Œ κ΅¬ν˜„ν•  수 있게 λ©λ‹ˆλ‹€.


3. μ£Όμš” κΈ°λŠ₯ μ •μ˜

κ΅¬μ„±μš”μ†ŒκΈ°λŠ₯
Metrics μ€‘κ°œ μ„œλ²„- 이벀트 μˆ˜μ§‘μš© REST API 제곡
- Micrometer 기반 Prometheus Export
- 이벀트 둜그 μ €μž₯ κΈ°λŠ₯ (선택)
SDK (Kotlin 라이브러리)- ν΄λΌμ΄μ–ΈνŠΈ μ›Ή/μ•±μ—μ„œ 이벀트 전솑
- κ°„νŽΈν•œ API 제곡 (trackPurchase() λ“±)
- μž₯μ•  μ‹œ μ˜ˆμ™Έ 처리 및 둜컬 μΊμ‹œ (ν™•μž₯ κ°€λŠ₯)
Prometheus- Metrics μ€‘κ°œ μ„œλ²„λ‘œλΆ€ν„° 주기적 μŠ€ν¬λž˜ν•‘
- μ‹œκ°„λ³„ λ§€μ„œλ“œλ³„ νŠΈλžœμž­μ…˜ 카운트 μ €μž₯
Grafana- Prometheus 데이터 μ‹œκ°ν™”
- 도메인별 νŠΈλžœμž­μ…˜ ν˜„ν™© λŒ€μ‹œλ³΄λ“œ ꡬ성

4. μŠ€νŽ™ μ •μ˜

4.1 μ€‘κ°œ λ°±μ—”λ“œ μ„œλ²„

  • μ–Έμ–΄: Kotlin

  • ν”„λ ˆμž„μ›Œν¬: Spring Boot 3.x

  • μ£Όμš” 라이브러리:

    • Micrometer

    • Jackson

    • Prometheus Exporter

  • κΈ°λŠ₯:

    • /metrics/purchase: νŠΈλžœμž­μ…˜ 이벀트 μˆ˜μ‹  API

    • /actuator/prometheus: Prometheus μŠ€ν¬λž˜ν•‘μš© μ—”λ“œν¬μΈνŠΈ

4.2 SDK 라이브러리

  • μ–Έμ–΄: Kotlin (Java ν˜Έν™˜)

  • 배포 방식: .jar or Maven Registry

  • 라이브러리: okhttp, jackson-module-kotlin

  • API:

val client = MetricsClient("https://metrics.server.com") 
 
client.trackPurchase(domain = "shop", itemId = "abc123", userId = "user456")

4.3 데이터 μ‹œκ°ν™”

  • Prometheus + Grafana

  • μˆ˜μ§‘ μ§€ν‘œ:

    • purchase.count{domain="A"} λ“±μœΌλ‘œ 도메인 - λ§€μ„œλ“œλ³„ νŠΈλžœμž­μ…˜ 수 μ‹œκ°ν™”
  • λŒ€μ‹œλ³΄λ“œ ν•­λͺ©:

    • μ‹œκ°„λ³„ νŠΈλ Œλ“œ

    • 도메인별 ꡬ맀 점유율

    • 졜근 이벀트 둜그 (선택 μ‹œ DB μ‚¬μš©)